from IPython.display import Image
Image('img/FIFA 17.jpg')
# To support both python 2 and python 3
from __future__ import division, print_function, unicode_literals
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv('data/FullData.csv') # contains full data, to be analyzed
df.head(5)
df.info() # tells us about type of objects in df
df.describe()
df.isnull().any() #checking null val. for each col
df.isnull().sum() #checking null val. for each col
def heatmap(df,figsize=(25,25),annot_size = 8,cmap=sns.cubehelix_palette(start = 0.2,rot = 0.3,dark = 0.15,light = 0.85,as_cmap = True)):
corr = df.corr()
_,ax = plt.subplots(1,1,figsize=figsize)
sns.heatmap(corr,
cbar=True,
cbar_kws={'shrink':0.9},
annot=True,
annot_kws={'fontsize':annot_size},
cmap = cmap
)
plt.show()
heatmap(df)
teamdf = df.copy(deep=True)
teamdf = teamdf.drop(["Nationality", "National_Position", "Club_Joining", "Contract_Expiry"], axis=1)
teamdf.head(5)
teams = teamdf.groupby(['Club'])['Rating'].mean().sort_values(ascending=False)
teams.head(10)
teams.tail(10)
teamdf[teamdf['Club_Position'].isnull()]
teams_wo_freeagent = teamdf.drop(teamdf.index[383])
teams_wo_freeagent.shape
# Removed free agent from the set
teams = teams_wo_freeagent.groupby(['Club'])['Rating'].mean().sort_values(ascending=False)
print("Top 10 Teams")
top10_teams = teams.head(10)
top10_teams
print("Bottom 10 Teams")
bottom10_teams = teams.tail(10)
bottom10_teams
player_df = pd.read_csv("data/FullData.csv")
player_df.head(5)
player_df = player_df[["Name" ,"Nationality", "Rating", "Club_Position", "Ball_Control", "Dribbling", "Marking","Sliding_Tackle", "Standing_Tackle", "Aggression", "Reactions", "Attacking_Position", "Crossing", "Acceleration", "Balance", "GK_Positioning","GK_Diving","GK_Kicking","GK_Reflexes","Penalties","Volleys"]]
#Unique positions from all the club
unique_position = player_df["Club_Position"].unique()
unique_position
unique_position.shape
# Grouping positions
attackers = ['LW', 'RW', 'ST', 'RS', 'LF', 'CF', 'RF', 'LS']
midfielders = ['RCM', 'CAM', 'LCM', 'LM', 'LDM', 'RM', 'CDM', 'RDM', 'LAM', 'CM', 'RAM']
defenders = ['LCB', 'RB', 'RCB', 'LB', 'CDM', 'RDM', 'CB', 'RWB', 'LWB']
goalkeepers = ['GK']
others = ['Sub', 'Res'] # Remove these rows
player_df = player_df[(player_df.Club_Position != 'Sub') & (player_df.Club_Position != 'Res')]
player_df.head(5)
player_df[player_df['Club_Position'].isin(attackers)].head(5)
player_df[player_df['Club_Position'].isin(midfielders)].head(5)
player_df[player_df['Club_Position'].isin(defenders)].head(5)
player_df[player_df['Club_Position'].isin(goalkeepers)].head(5)
player_df.shape
from pandasql import sqldf
pysqldf = lambda q: sqldf(q, globals())
query = '''select Name, Nationality, max(Rating) as Rating, Club_Position from player_df group by Club_Position'''
res = pysqldf(query)
res
'''
Considering players skill below 95 percentile has to be improved, marking player Attributes development as “Yes”
'''
player_attdf = pd.read_csv("data/FullData.csv")
player_attdf = player_attdf[['Name', 'Nationality', 'Rating', 'Preffered_Position', 'Skill_Moves',
'Ball_Control', 'Dribbling', 'Marking', 'Sliding_Tackle',
'Standing_Tackle', 'Aggression', 'Reactions', 'Attacking_Position',
'Interceptions', 'Vision', 'Composure', 'Crossing', 'Short_Pass',
'Long_Pass', 'Acceleration', 'Speed', 'Stamina', 'Strength', 'Balance',
'Agility', 'Jumping', 'Heading', 'Shot_Power', 'Finishing',
'Long_Shots', 'Curve', 'Freekick_Accuracy', 'Penalties', 'Volleys',
'GK_Positioning', 'GK_Diving', 'GK_Kicking', 'GK_Handling',
'GK_Reflexes']]
player_attdf.Preffered_Position.replace("/*", "", regex=True, inplace=True)
player_attdf.Preffered_Position.unique()
player_attdf.Preffered_Position.unique().shape
'''
Changing all positions into - Forward , Midfielder, Defender , Goalkeeper
In the Preffered Position column
For Forward player - preffered position ends with W
For Defender player - preffered position ends with W
For Midfielder player - preffered position ends with W
For Goalkeeper - preffered position is GK
preffered position - STCF,ST,CF,CFST are Forward player
'''
player_attdf.Preffered_Position.replace("/*.^", "", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("^.*W", "Forward", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("Forward*.^", "Forward", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("GK", "Goalkeeper", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("^.*B", "Defender", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("Defender*.^", "Defender", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("^.*M", "Midfielder", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("Midfielder*.^", "Midfielder", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("STCF", "Forward", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("ST", "Forward", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("CF", "Forward", regex=True, inplace=True)
player_attdf.Preffered_Position.replace("CFST", "Forward", regex=True, inplace=True)
#getting unique positions after above all processing
player_attdf.Preffered_Position.unique()
player_attdf.head(5)
player_attdf.shape
from pandasql import sqldf
pysqldf = lambda q: sqldf(q, globals())
query = '''select Name, Nationality, max(Rating) as Rating, Preffered_Position from player_attdf group by Preffered_Position'''
res = pysqldf(query)
res
#Creating seperate df for Each category
forward_df = player_attdf.loc[player_attdf['Preffered_Position'] == 'Forward']
midfielder_df = player_attdf.loc[player_attdf['Preffered_Position'] == 'Midfielder']
defender_df = player_attdf.loc[player_attdf['Preffered_Position'] == 'Defender']
goalkeeper_df = player_attdf.loc[player_attdf['Preffered_Position'] == 'Goalkeeper']
forward_df.head(5)
midfielder_df.head(5)
defender_df.head(5)
goalkeeper_df.head(5)
forward_df.Skill_Moves = np.where(forward_df.Skill_Moves >= forward_df.Skill_Moves.quantile(q=.95), 'No', 'Yes')
forward_df.Ball_Control = np.where(forward_df.Ball_Control >= forward_df.Ball_Control.quantile(q=.95), 'No', 'Yes')
forward_df.Dribbling = np.where(forward_df.Dribbling >= forward_df.Dribbling.quantile(q=.95), 'No', 'Yes')
forward_df.Marking = np.where(forward_df.Marking >= forward_df.Marking.quantile(q=.95), 'No', 'Yes')
forward_df.Sliding_Tackle = np.where(forward_df.Sliding_Tackle >= forward_df.Sliding_Tackle.quantile(q=.95), 'No', 'Yes')
forward_df.Standing_Tackle = np.where(forward_df.Standing_Tackle >= forward_df.Standing_Tackle.quantile(q=.95), 'No', 'Yes')
forward_df.Aggression = np.where(forward_df.Aggression >= forward_df.Aggression.quantile(q=.95), 'No', 'Yes')
forward_df.Reactions = np.where(forward_df.Reactions >= forward_df.Reactions.quantile(q=.95), 'No', 'Yes')
forward_df.Attacking_Position = np.where(forward_df.Attacking_Position >= forward_df.Attacking_Position.quantile(q=.95), 'No', 'Yes')
forward_df.Interceptions = np.where(forward_df.Interceptions >= forward_df.Interceptions.quantile(q=.95), 'No', 'Yes')
forward_df.Vision = np.where(forward_df.Vision >= forward_df.Vision.quantile(q=.95), 'No', 'Yes')
forward_df.Composure = np.where(forward_df.Composure >= forward_df.Composure.quantile(q=.95), 'No', 'Yes')
forward_df.Crossing = np.where(forward_df.Crossing >= forward_df.Crossing.quantile(q=.95), 'No', 'Yes')
forward_df.Short_Pass = np.where(forward_df.Short_Pass >= forward_df.Short_Pass.quantile(q=.95), 'No', 'Yes')
forward_df.Long_Pass = np.where(forward_df.Long_Pass >= forward_df.Long_Pass.quantile(q=.95), 'No', 'Yes')
forward_df.Acceleration = np.where(forward_df.Acceleration >= forward_df.Acceleration.quantile(q=.95), 'No', 'Yes')
forward_df.Speed = np.where(forward_df.Speed >= forward_df.Speed.quantile(q=.95), 'No', 'Yes')
forward_df.Stamina = np.where(forward_df.Stamina >= forward_df.Stamina.quantile(q=.95), 'No', 'Yes')
forward_df.Strength = np.where(forward_df.Strength >= forward_df.Strength.quantile(q=.95), 'No', 'Yes')
forward_df.Balance = np.where(forward_df.Balance >= forward_df.Balance.quantile(q=.95), 'No', 'Yes')
forward_df.Agility = np.where(forward_df.Agility >= forward_df.Agility.quantile(q=.95), 'No', 'Yes')
forward_df.Jumping = np.where(forward_df.Jumping >= forward_df.Jumping.quantile(q=.95), 'No', 'Yes')
forward_df.Heading = np.where(forward_df.Heading >= forward_df.Heading.quantile(q=.95), 'No', 'Yes')
forward_df.Shot_Power = np.where(forward_df.Shot_Power >= forward_df.Shot_Power.quantile(q=.95), 'No', 'Yes')
forward_df.Finishing = np.where(forward_df.Finishing >= forward_df.Finishing.quantile(q=.95), 'No', 'Yes')
forward_df.Long_Shots = np.where(forward_df.Long_Shots >= forward_df.Long_Shots.quantile(q=.95), 'No', 'Yes')
forward_df.Curve = np.where(forward_df.Curve >= forward_df.Curve.quantile(q=.95), 'No', 'Yes')
forward_df.Freekick_Accuracy = np.where(forward_df.Freekick_Accuracy >= forward_df.Freekick_Accuracy.quantile(q=.95), 'No', 'Yes')
forward_df.Penalties = np.where(forward_df.Penalties >= forward_df.Penalties.quantile(q=.95), 'No', 'Yes')
forward_df.Volleys = np.where(forward_df.Volleys >= forward_df.Volleys.quantile(q=.95), 'No', 'Yes')
forward_df.GK_Positioning = np.where(forward_df.GK_Positioning >= forward_df.GK_Positioning.quantile(q=.95), 'No', 'Yes')
forward_df.GK_Diving = np.where(forward_df.GK_Diving >= forward_df.GK_Diving.quantile(q=.95), 'No', 'Yes')
forward_df.GK_Kicking = np.where(forward_df.GK_Kicking >= forward_df.GK_Kicking.quantile(q=.95), 'No', 'Yes')
forward_df.GK_Handling = np.where(forward_df.GK_Handling >= forward_df.GK_Handling.quantile(q=.95), 'No', 'Yes')
forward_df.GK_Reflexes = np.where(forward_df.GK_Reflexes >= forward_df.GK_Reflexes.quantile(q=.95), 'No', 'Yes')
from IPython.display import display
pd.options.display.max_columns = None
display(forward_df.head(5))
midfielder_df.Skill_Moves = np.where(midfielder_df.Skill_Moves >= midfielder_df.Skill_Moves.quantile(q=.95), 'No', 'Yes')
midfielder_df.Ball_Control = np.where(midfielder_df.Ball_Control >= midfielder_df.Ball_Control.quantile(q=.95), 'No', 'Yes')
midfielder_df.Dribbling = np.where(midfielder_df.Dribbling >= midfielder_df.Dribbling.quantile(q=.95), 'No', 'Yes')
midfielder_df.Marking = np.where(midfielder_df.Marking >= midfielder_df.Marking.quantile(q=.95), 'No', 'Yes')
midfielder_df.Sliding_Tackle = np.where(midfielder_df.Sliding_Tackle >= midfielder_df.Sliding_Tackle.quantile(q=.95), 'No', 'Yes')
midfielder_df.Standing_Tackle = np.where(midfielder_df.Standing_Tackle >= midfielder_df.Standing_Tackle.quantile(q=.95), 'No', 'Yes')
midfielder_df.Aggression = np.where(midfielder_df.Aggression >= midfielder_df.Aggression.quantile(q=.95), 'No', 'Yes')
midfielder_df.Reactions = np.where(midfielder_df.Reactions >= midfielder_df.Reactions.quantile(q=.95), 'No', 'Yes')
midfielder_df.Attacking_Position = np.where(midfielder_df.Attacking_Position >= midfielder_df.Attacking_Position.quantile(q=.95), 'No', 'Yes')
midfielder_df.Interceptions = np.where(midfielder_df.Interceptions >= midfielder_df.Interceptions.quantile(q=.95), 'No', 'Yes')
midfielder_df.Vision = np.where(midfielder_df.Vision >= midfielder_df.Vision.quantile(q=.95), 'No', 'Yes')
midfielder_df.Composure = np.where(midfielder_df.Composure >= midfielder_df.Composure.quantile(q=.95), 'No', 'Yes')
midfielder_df.Crossing = np.where(midfielder_df.Crossing >= midfielder_df.Crossing.quantile(q=.95), 'No', 'Yes')
midfielder_df.Short_Pass = np.where(midfielder_df.Short_Pass >= midfielder_df.Short_Pass.quantile(q=.95), 'No', 'Yes')
midfielder_df.Long_Pass = np.where(midfielder_df.Long_Pass >= midfielder_df.Long_Pass.quantile(q=.95), 'No', 'Yes')
midfielder_df.Acceleration = np.where(midfielder_df.Acceleration >= midfielder_df.Acceleration.quantile(q=.95), 'No', 'Yes')
midfielder_df.Speed = np.where(midfielder_df.Speed >= midfielder_df.Speed.quantile(q=.95), 'No', 'Yes')
midfielder_df.Stamina = np.where(midfielder_df.Stamina >= midfielder_df.Stamina.quantile(q=.95), 'No', 'Yes')
midfielder_df.Strength = np.where(midfielder_df.Strength >= midfielder_df.Strength.quantile(q=.95), 'No', 'Yes')
midfielder_df.Balance = np.where(midfielder_df.Balance >= midfielder_df.Balance.quantile(q=.95), 'No', 'Yes')
midfielder_df.Agility = np.where(midfielder_df.Agility >= midfielder_df.Agility.quantile(q=.95), 'No', 'Yes')
midfielder_df.Jumping = np.where(midfielder_df.Jumping >= midfielder_df.Jumping.quantile(q=.95), 'No', 'Yes')
midfielder_df.Heading = np.where(midfielder_df.Heading >= midfielder_df.Heading.quantile(q=.95), 'No', 'Yes')
midfielder_df.Shot_Power = np.where(midfielder_df.Shot_Power >= midfielder_df.Shot_Power.quantile(q=.95), 'No', 'Yes')
midfielder_df.Finishing = np.where(midfielder_df.Finishing >= midfielder_df.Finishing.quantile(q=.95), 'No', 'Yes')
midfielder_df.Long_Shots = np.where(midfielder_df.Long_Shots >= midfielder_df.Long_Shots.quantile(q=.95), 'No', 'Yes')
midfielder_df.Curve = np.where(midfielder_df.Curve >= midfielder_df.Curve.quantile(q=.95), 'No', 'Yes')
midfielder_df.Freekick_Accuracy = np.where(midfielder_df.Freekick_Accuracy >= midfielder_df.Freekick_Accuracy.quantile(q=.95), 'No', 'Yes')
midfielder_df.Penalties = np.where(midfielder_df.Penalties >= midfielder_df.Penalties.quantile(q=.95), 'No', 'Yes')
midfielder_df.Volleys = np.where(midfielder_df.Volleys >= midfielder_df.Volleys.quantile(q=.95), 'No', 'Yes')
midfielder_df.GK_Positioning = np.where(midfielder_df.GK_Positioning >= midfielder_df.GK_Positioning.quantile(q=.95), 'No', 'Yes')
midfielder_df.GK_Diving = np.where(midfielder_df.GK_Diving >= midfielder_df.GK_Diving.quantile(q=.95), 'No', 'Yes')
midfielder_df.GK_Kicking = np.where(midfielder_df.GK_Kicking >= midfielder_df.GK_Kicking.quantile(q=.95), 'No', 'Yes')
midfielder_df.GK_Handling = np.where(midfielder_df.GK_Handling >= midfielder_df.GK_Handling.quantile(q=.95), 'No', 'Yes')
midfielder_df.GK_Reflexes = np.where(midfielder_df.GK_Reflexes >= midfielder_df.GK_Reflexes.quantile(q=.95), 'No', 'Yes')
display(midfielder_df.head(5))
defender_df.Skill_Moves = np.where(defender_df.Skill_Moves >= defender_df.Skill_Moves.quantile(q=.95), 'No', 'Yes')
defender_df.Ball_Control = np.where(defender_df.Ball_Control >= defender_df.Ball_Control.quantile(q=.95), 'No', 'Yes')
defender_df.Dribbling = np.where(defender_df.Dribbling >= defender_df.Dribbling.quantile(q=.95), 'No', 'Yes')
defender_df.Marking = np.where(defender_df.Marking >= defender_df.Marking.quantile(q=.95), 'No', 'Yes')
defender_df.Sliding_Tackle = np.where(defender_df.Sliding_Tackle >= defender_df.Sliding_Tackle.quantile(q=.95), 'No', 'Yes')
defender_df.Standing_Tackle = np.where(defender_df.Standing_Tackle >= defender_df.Standing_Tackle.quantile(q=.95), 'No', 'Yes')
defender_df.Aggression = np.where(defender_df.Aggression >= defender_df.Aggression.quantile(q=.95), 'No', 'Yes')
defender_df.Reactions = np.where(defender_df.Reactions >= defender_df.Reactions.quantile(q=.95), 'No', 'Yes')
defender_df.Attacking_Position = np.where(defender_df.Attacking_Position >= defender_df.Attacking_Position.quantile(q=.95), 'No', 'Yes')
defender_df.Interceptions = np.where(defender_df.Interceptions >= defender_df.Interceptions.quantile(q=.95), 'No', 'Yes')
defender_df.Vision = np.where(defender_df.Vision >= defender_df.Vision.quantile(q=.95), 'No', 'Yes')
defender_df.Composure = np.where(defender_df.Composure >= defender_df.Composure.quantile(q=.95), 'No', 'Yes')
defender_df.Crossing = np.where(defender_df.Crossing >= defender_df.Crossing.quantile(q=.95), 'No', 'Yes')
defender_df.Short_Pass = np.where(defender_df.Short_Pass >= defender_df.Short_Pass.quantile(q=.95), 'No', 'Yes')
defender_df.Long_Pass = np.where(defender_df.Long_Pass >= defender_df.Long_Pass.quantile(q=.95), 'No', 'Yes')
defender_df.Acceleration = np.where(defender_df.Acceleration >= defender_df.Acceleration.quantile(q=.95), 'No', 'Yes')
defender_df.Speed = np.where(defender_df.Speed >= defender_df.Speed.quantile(q=.95), 'No', 'Yes')
defender_df.Stamina = np.where(defender_df.Stamina >= defender_df.Stamina.quantile(q=.95), 'No', 'Yes')
defender_df.Strength = np.where(defender_df.Strength >= defender_df.Strength.quantile(q=.95), 'No', 'Yes')
defender_df.Balance = np.where(defender_df.Balance >= defender_df.Balance.quantile(q=.95), 'No', 'Yes')
defender_df.Agility = np.where(defender_df.Agility >= defender_df.Agility.quantile(q=.95), 'No', 'Yes')
defender_df.Jumping = np.where(defender_df.Jumping >= defender_df.Jumping.quantile(q=.95), 'No', 'Yes')
defender_df.Heading = np.where(defender_df.Heading >= defender_df.Heading.quantile(q=.95), 'No', 'Yes')
defender_df.Shot_Power = np.where(defender_df.Shot_Power >= defender_df.Shot_Power.quantile(q=.95), 'No', 'Yes')
defender_df.Finishing = np.where(defender_df.Finishing >= defender_df.Finishing.quantile(q=.95), 'No', 'Yes')
defender_df.Long_Shots = np.where(defender_df.Long_Shots >= defender_df.Long_Shots.quantile(q=.95), 'No', 'Yes')
defender_df.Curve = np.where(defender_df.Curve >= defender_df.Curve.quantile(q=.95), 'No', 'Yes')
defender_df.Freekick_Accuracy = np.where(defender_df.Freekick_Accuracy >= defender_df.Freekick_Accuracy.quantile(q=.95), 'No', 'Yes')
defender_df.Penalties = np.where(defender_df.Penalties >= defender_df.Penalties.quantile(q=.95), 'No', 'Yes')
defender_df.Volleys = np.where(defender_df.Volleys >= defender_df.Volleys.quantile(q=.95), 'No', 'Yes')
defender_df.GK_Positioning = np.where(defender_df.GK_Positioning >= defender_df.GK_Positioning.quantile(q=.95), 'No', 'Yes')
defender_df.GK_Diving = np.where(defender_df.GK_Diving >= defender_df.GK_Diving.quantile(q=.95), 'No', 'Yes')
defender_df.GK_Kicking = np.where(defender_df.GK_Kicking >= defender_df.GK_Kicking.quantile(q=.95), 'No', 'Yes')
defender_df.GK_Handling = np.where(defender_df.GK_Handling >= defender_df.GK_Handling.quantile(q=.95), 'No', 'Yes')
defender_df.GK_Reflexes = np.where(defender_df.GK_Reflexes >= defender_df.GK_Reflexes.quantile(q=.95), 'No', 'Yes')
display(defender_df.head(5))
goalkeeper_df.Skill_Moves = np.where(goalkeeper_df.Skill_Moves >= goalkeeper_df.Skill_Moves.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Ball_Control = np.where(goalkeeper_df.Ball_Control >= goalkeeper_df.Ball_Control.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Dribbling = np.where(goalkeeper_df.Dribbling >= goalkeeper_df.Dribbling.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Marking = np.where(goalkeeper_df.Marking >= goalkeeper_df.Marking.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Sliding_Tackle = np.where(goalkeeper_df.Sliding_Tackle >= goalkeeper_df.Sliding_Tackle.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Standing_Tackle = np.where(goalkeeper_df.Standing_Tackle >= goalkeeper_df.Standing_Tackle.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Aggression = np.where(goalkeeper_df.Aggression >= goalkeeper_df.Aggression.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Reactions = np.where(goalkeeper_df.Reactions >= goalkeeper_df.Reactions.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Attacking_Position = np.where(goalkeeper_df.Attacking_Position >= goalkeeper_df.Attacking_Position.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Interceptions = np.where(goalkeeper_df.Interceptions >= goalkeeper_df.Interceptions.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Vision = np.where(goalkeeper_df.Vision >= goalkeeper_df.Vision.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Composure = np.where(goalkeeper_df.Composure >= goalkeeper_df.Composure.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Crossing = np.where(goalkeeper_df.Crossing >= goalkeeper_df.Crossing.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Short_Pass = np.where(goalkeeper_df.Short_Pass >= goalkeeper_df.Short_Pass.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Long_Pass = np.where(goalkeeper_df.Long_Pass >= goalkeeper_df.Long_Pass.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Acceleration = np.where(goalkeeper_df.Acceleration >= goalkeeper_df.Acceleration.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Speed = np.where(goalkeeper_df.Speed >= goalkeeper_df.Speed.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Stamina = np.where(goalkeeper_df.Stamina >= goalkeeper_df.Stamina.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Strength = np.where(goalkeeper_df.Strength >= goalkeeper_df.Strength.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Balance = np.where(goalkeeper_df.Balance >= goalkeeper_df.Balance.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Agility = np.where(goalkeeper_df.Agility >= goalkeeper_df.Agility.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Jumping = np.where(goalkeeper_df.Jumping >= goalkeeper_df.Jumping.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Heading = np.where(goalkeeper_df.Heading >= goalkeeper_df.Heading.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Shot_Power = np.where(goalkeeper_df.Shot_Power >= goalkeeper_df.Shot_Power.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Finishing = np.where(goalkeeper_df.Finishing >= goalkeeper_df.Finishing.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Long_Shots = np.where(goalkeeper_df.Long_Shots >= goalkeeper_df.Long_Shots.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Curve = np.where(goalkeeper_df.Curve >= goalkeeper_df.Curve.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Freekick_Accuracy = np.where(goalkeeper_df.Freekick_Accuracy >= goalkeeper_df.Freekick_Accuracy.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Penalties = np.where(goalkeeper_df.Penalties >= goalkeeper_df.Penalties.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.Volleys = np.where(goalkeeper_df.Volleys >= goalkeeper_df.Volleys.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.GK_Positioning = np.where(goalkeeper_df.GK_Positioning >= goalkeeper_df.GK_Positioning.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.GK_Diving = np.where(goalkeeper_df.GK_Diving >= goalkeeper_df.GK_Diving.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.GK_Kicking = np.where(goalkeeper_df.GK_Kicking >= goalkeeper_df.GK_Kicking.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.GK_Handling = np.where(goalkeeper_df.GK_Handling >= goalkeeper_df.GK_Handling.quantile(q=.95), 'No', 'Yes')
goalkeeper_df.GK_Reflexes = np.where(goalkeeper_df.GK_Reflexes >= goalkeeper_df.GK_Reflexes.quantile(q=.95), 'No', 'Yes')
display(goalkeeper_df.head(5))
from IPython.display import Image
Image("img/MvsR.jpg")
ronaldo_df = player_attdf.loc[player_attdf["Name"] == "Cristiano Ronaldo"]
ronaldo_df = ronaldo_df.drop(['Name', 'Nationality', 'Rating', 'Preffered_Position'],axis=1)
ronaldo_df
messi_df = player_attdf.loc[player_attdf["Name"] == "Lionel Messi"]
messi_df = messi_df.drop(['Name', 'Nationality', 'Rating', 'Preffered_Position'],axis=1)
messi_df
#%matplotlib notebook
# Data and attributes
attributes = ['Skill Moves', 'Ball Control', 'Dribbling', 'Marking', 'Sliding Tackle',
'Standing Tackle', 'Aggression', 'Reactions', 'Attacking Position',
'Interceptions', 'Vision', 'Composure', 'Crossing', 'Short Pass',
'Long Pass', 'Acceleration', 'Speed', 'Stamina', 'Strength', 'Balance',
'Agility', 'Jumping', 'Heading', 'Shot Power', 'Finishing',
'Long Shots', 'Curve', 'Freekick Accuracy', 'Penalties', 'Volleys',
'GK Positioning', 'GK Diving', 'GK Kicking', 'GK Handling',
'GK Reflexes']
ronaldo = np.array([5,93,92,22,23,31,63,96,94,29,85,86,84,83,77,91,92,92,80,63,90,95,85,92,93,90,81,76,85,88,14,7,15,11,11])
messi = np.array([4,95,97,13,26,28,48,95,93,22,90,94,77,88,87,92,87,74,59,95,90,68,71,85,95,88,89,90,74,85,14,6,15,11,8])
idx = ronaldo.argsort()
attributes, ronaldo, messi = [np.take(x, idx) for x in [attributes, ronaldo, messi]]
y = np.arange(messi.size)
fig, axes = plt.subplots(ncols=2, sharey=True, figsize=(15,10))
ax0 = axes[0].barh(y, ronaldo, align='center', color='#00E676', zorder=10)
axes[0].set(title='Ronaldo')
ax1 = axes[1].barh(y, messi, align='center', color='#FF8F00', zorder=10)
axes[1].set(title='Messi')
axes[0].invert_xaxis()
axes[0].set(yticks=y, yticklabels=attributes)
axes[0].set_yticklabels(attributes, fontweight='bold', fontsize=8)
axes[0].yaxis.tick_right()
#for messi
for ax0 in axes.flat:
ax0.margins(0.03)
ax0.grid(True)
'''for i, v in enumerate(messi):
ax0.text(v , i, str(v), color='black', fontweight='bold')'''
for i in ax0.patches:
# get_width pulls left or right; get_y pushes up or down
ax0.text(i.get_width()+.1, i.get_y()+.31, \
str((round(i.get_width()))), fontsize=8, fontweight='bold', color='black')
#for ronaldo
for ax0 in axes.flat:
ax0.margins(0.03)
ax0.grid(True)
for i, v in enumerate(ronaldo):
ax0.text(v+3 , i, str(v), color='black', fontweight='bold')
fig.tight_layout()
fig.subplots_adjust(wspace=0.2)
plt.style.use('ggplot')
plt.show()
colors = ['green','red']
chosen_players = ['Cristiano Ronaldo','Lionel Messi']
attributes = ['Ball_Control','Dribbling','Marking','Aggression','Reactions', 'Attacking_Position',
'Interceptions', 'Vision', 'Composure', 'Crossing', 'Short_Pass',
'Long_Pass', 'Acceleration', 'Speed', 'Stamina', 'Strength', 'Balance',
'Agility', 'Jumping', 'Heading', 'Shot_Power', 'Finishing',
'Long_Shots', 'Curve', 'Freekick_Accuracy', 'Penalties', 'Volleys'
]
ranges = [[2**-20, df[attr].max()] for attr in attributes]
datas = df[attributes].values
fig = plt.figure(figsize=(25,25))
radar = RadarChart(fig,attributes,ranges)
for player,data,color in zip(chosen_players,datas,colors):
radar.plot(data,color = color,label=player)
radar.legend(loc = 1, fontsize = 'large')
radar.fill(data, alpha = 0.1, color = color)
plt.show()
print("no. of players having rating >=90 in FIFA 17:")
print((df.loc[:,'Rating'] > 89).sum())
print("Their Names: ")
bestRated_players = df[df.loc[:,'Rating']>89]#[['Name','Club','Rating']] #Ronaldo is the winner as per the Ratings. 2 GKs are present too
bestRated_players
def _scale_data(datas,ranges): #data of 1 row is provided, with every column ranges
(x1,x2) = ranges[0]
diff = x2-x1
fact = 0
scaled_data = []
for data, (y1,y2) in zip(datas,ranges):
fact = ((data-y1)/(y2-y1))*diff
scaled_data.append(fact+x1)
return scaled_data
'''
class RadarChart
'''
class RadarChart():
def __init__(self,fig,attributes,ranges,n_ordinate_levels=6):
#n_ordinate_levels is for grid scaping, attributes being features, ranges is a list of all feature ranges
angles = np.arange(0, 360, 360./len(attributes))
'''
Add an axes at position rect [left, bottom, width, height] where all quantities are in fractions of figure width and height.
kwargs are legal Axes kwargs plus projection which sets the projection type of the axes.
(For backward compatibility, polar=True may also be provided, which is equivalent to projection='polar'). Valid values for projection are [‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’].
Some of these projections support additional kwargs, which may be provided to add_axes().
'''
axes = [fig.add_axes([0.1,0.1,0.8,0.8],polar=True,label="axis{}".format(i)) for i in range(len(attributes))] #we use label to distinguish b/w different axes, its a must, else we dont get different axes!
_,text = axes[0].set_thetagrids(angles,labels = attributes)
'''
Set the angles at which to place the theta grids (these
gridlines are equal along the theta dimension). *angles* is in
degrees.
Return value is a list of tuples (*line*, *label*), where #here (_,text)
*line* is :class:`~matplotlib.lines.Line2D` instances and the
*label* is :class:`~matplotlib.text.Text` instances.
'''
for txt,angle in zip(text,angles):
txt.set_rotation(angle-90)
txt.set_size(15)
'''
Axes contains a Patch patch which is a Rectangle for Cartesian coordinates and a Circle for polar coordinates;
this patch determines the shape, background and border of the plotting region;
'''
for ax in axes[1:]:
ax.patch.set_visible(False) #patch is background
ax.xaxis.set_visible(False)
ax.grid("off")
for i,ax in enumerate(axes):
grid = np.linspace(*ranges[i],num = n_ordinate_levels)
grid_label = [""] + [str(int(x)) for x in grid[1:]] ## circular grid label, from inner circle to outer circle
ax.set_rgrids(grid,labels = grid_label,angle=angles[i]) ##rgrid is radia grids
#grid here requires, starting circle distances, last circle dist, no. of circles i.e. *ranges[i],n_ordinate_levels
ax.set_ylim(*ranges[i])
self.angle = np.deg2rad(np.r_[angles,angles[0]])
self.ranges = ranges
self.ax = axes[0]
def plot(self,data,*args,**kwargs): ##for plotting lines
scaled_data = _scale_data(data,self.ranges)
self.ax.plot(self.angle,np.r_[scaled_data,scaled_data[0]],*args,**kwargs)
def fill(self,data,*args,**kwargs):
scaled_data = _scale_data(data,self.ranges) ##for filling those lines generated polygon with color
self.ax.fill(self.angle,np.r_[scaled_data,scaled_data[0]],*args,**kwargs)
def legend(self,*args,**kwargs): ##for labelling row name, i.e about self
self.ax.legend(*args,**kwargs)
'''
class over
'''
attributes = ['Ball_Control','Dribbling','Marking','Aggression','Reactions', 'Attacking_Position',
'Interceptions', 'Vision', 'Composure', 'Crossing', 'Short_Pass',
'Long_Pass', 'Acceleration', 'Speed', 'Stamina', 'Strength', 'Balance',
'Agility', 'Jumping', 'Heading', 'Shot_Power', 'Finishing',
'Long_Shots', 'Curve', 'Freekick_Accuracy', 'Penalties', 'Volleys',
'GK_Positioning', 'GK_Diving', 'GK_Kicking', 'GK_Handling',
'GK_Reflexes']
ranges = [[2**-20, df[attr].max()] for attr in attributes]
top_players = bestRated_players['Name'].unique().tolist()
datas = df[attributes].values
print(datas.shape)
print(type(datas))
print(type(top_players))
colors = sns.hls_palette(n_colors=len(top_players))
print(type(colors))
top_players
fig = plt.figure(figsize=(25,25))
radar = RadarChart(fig,attributes,ranges)
for player,data,color in zip(top_players,datas,colors):
radar.plot(data,color = color,label=player)
radar.legend(loc = 1, fontsize = 'large')
radar.fill(data, alpha = 0.1, color = color)
plt.show()
All the above attributes are in general related to human body and its phases across different age, It is really interesting to see how a professional football players body changes over the years
sns.pairplot(data=df, hue='Age', vars=['Rating', 'Skill_Moves', 'Strength','Aggression', 'Reactions'])
sns.pairplot(data=df, hue='Age', vars=['Vision', 'Speed', 'Stamina', 'Balance', 'Agility'])